package com.hspedu.smallchange;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class SmallChangeSys {
    //化繁为简
    //1.先完成显示菜单，并可以选择菜单，给出对应菜单
    //2.完成零钱通明细 利用多态数组存起来，并利用toString打印各个类的属性
    //   2.1收益入账
    //      格式：收益入账 金额 时间 余额
    //   2.2消费
    //      格式：消费支出 金额 时间 余额
    //余额为父类money的属性
    //时间为父类time

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean loop = true;
        String key = "";
        //2.零钱明细：
        // 思路：(1)把信息存到字符串数组里面去 (2)把信息存到对象里面去 (3)利用字符串进行拼接
        String details = "---------------零钱通明细---------------";
        //3.完成收益入账  完成功能驱动程序员增加新的变化和代码
        //思路：定义新变量

        double balance = 0;
        String note = "";
        Date date = null; //data 是import java.util.Date 类型，表示日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化的一个对象

        do {
            System.out.println("---------------零钱通菜单---------------");
            System.out.println("\t\t\t1 零钱通明细");
            System.out.println("\t\t\t2 收益入账");
            System.out.println("\t\t\t3 消费");
            System.out.println("\t\t\t4 退  出");
            System.out.print("请选择(1-4):");

            key = sc.next();
            double money = 0;
            //使用分支结构来进行判断进行什么操作
            switch (key) {
                case "1":
                    System.out.println(details);
                    break;
                case "2":
                    //找出不正确的金额，给出提示即可，就直接break
                    System.out.print("收益入账金额：");
                    money = sc.nextDouble();

                    //校验金额
                    while (true) {
                        if (money <= 0) {
                            System.out.print("入账金额需>0,请重新输入入账金额:");
                            money = sc.nextDouble();
                            continue;
                        }
                        break;
                    }

                    //money 的值范围应该校验 -> 一会再完善
                    balance += money;
                    //拼接收益信息到details
                    date = new Date();//获取挡墙
                    details += "\n收益入账金额\t+" + money + "\t" + sdf.format(date) + "\t余额\t" + balance;
                    System.out.println("收益入账金额\t+" + money + "\t" + sdf.format(date) + "\t余额\t" + balance);
                    break;

                case "3":
                    System.out.print("消费金额：");
                    money = sc.nextDouble();
                    System.out.print("消费说明：");
                    note = sc.next();
                    //金额校验
                    while (true) {
                        if (money <= 0 || money > balance) {
                            System.out.println("消费金额应该在 1~" + balance);
                            System.out.print("请重新输入消费金额:");
                            money = sc.nextDouble();
                            System.out.print("消费说明：");
                            note = sc.next();
                            continue;
                        }
                        break;
                    }

                    balance -= money;
                    date = new Date();//获取挡墙
                    details += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t余额\t" + balance;
                    System.out.println(note + "\t-" + money + "\t" + sdf.format(date) + "\t余额\t" + balance);
                    break;

                    case "4":
                    System.out.print("是否退出系统y/n:");
                    String flag = "";
                    //我的逻辑
                    //耦合性太高了，要把确认是否是输入的y和n 独立出来，验证完之后 再来判断是y还是n
                /*    while(true){
                        flag = sc.next();
                        if(flag.equals("y") ){
                            loop = false;
                            System.out.println("程序退出，欢迎下次使用");
                            break;
                        }else if (flag.equals("n")){
                            break;
                        }else{
                            System.out.print("输入有误，请重新输入(y/n):");
                            flag = sc.next();
                        }
                    }*/

                    //老师的逻辑
                    //建议一段代码，实现一个小功能，尽量不要混在一起
                    while (true) {
                        flag = sc.next();
                        if ("y".equals(flag) || "n".equals(flag)) {
                            break;
                        } else {
                            System.out.print("输入有误，请重新输入(y/n):");
                        }
                    }
                    //当用户退出while循环后
                    if (flag.equals("y")) {
                        loop = false;
                        System.out.println("程序退出，欢迎下次使用");
                    } else {
                        System.out.println("程序继续运行");
                    }

                    break;
                default:
                    System.out.println("输入有误，请重新选择");
                    break;
            }
        } while (loop);

    }
}
